package Test;

import static org.junit.Assert.*;

import org.junit.Before;
import org.junit.Test;

import Componentes.Maquina;
import Componentes.Pieza;

/** En este test, se prueba que luego de crear una maquina, la misma procese una pieza y se analizan los
 * resultados de getPiezaTerminada y cantTerminadas */
public class testmaquina {

	private Maquina maquina;
	private Pieza pieza;
	private Pieza pieza2;
	
	@Before
	public void setUp() throws Exception {
		maquina = new Maquina(1);
		pieza = new Pieza(57);
		pieza2 = new Pieza(10);
		
		maquina.recibirPieza(pieza);
		maquina.procesarPieza(pieza, 1);
		
		//Tiempo para que se procese la pieza;
		Thread.sleep(200);
	}
	
	@Test
	public void testPiezaInexistente() {
		//Testeo negativo pido por pieza que no hay deberia dar null;
		Pieza resultadonegativo = maquina.getPiezaTerminada(pieza2);
		assertEquals("Test Pieza Terminada que no existe", null, resultadonegativo);
	}
	
	@Test	
	public void testCantTerminadas() {
		//Test cantidad terminadas deberia ser 1 luego de procesar una pieza.
		int cantterminadas = maquina.cantTerminadas();
		assertEquals("Test cantidad piezas terminadas",1,cantterminadas);
	}
	
	@Test
	public void testPiezaTerminada() {
		//Testeo positivo pide pieza que si esta, devuelve la misma.
		Pieza resultado = maquina.getPiezaTerminada(pieza);
		
		//Tiempo para sacar la pieza;
		try {
			Thread.sleep(100);
		} catch (InterruptedException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
		assertEquals("Test pieza terminada exitoso", pieza, resultado);	
	}
	
	
	@Test
	public void testResultadoNulo(){
		maquina.getPiezaTerminada(pieza);
		//Test cant termiandas luego de sacar la pieza debe ser 0.
		int resultadonulo = maquina.cantTerminadas();
		assertEquals("Test piezas terminadas vacio",0,resultadonulo);			
	}
	
	@Test
	public void testCombinarPiezas(){
		int aux = (pieza.getPieza()) + (pieza2.getPieza());
    	    	
    	Pieza test = maquina.recibirPieza(pieza, pieza2);
		
		//Test combinacion de dos piezas en la maquina.
		assertEquals("Test valor pieza combinada",aux,test.getPieza());			
		assertEquals("Test camino de pieza combinada",pieza.getCamino(),test.getCamino());
		assertEquals("Test etapa de pieza combinada",pieza.getEtapa(),test.getEtapa());
	}
	

}